package com.example.administrator.activitytest;

import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Switch;
import android.widget.Toast;

public class FirstActivity extends AppCompatActivity {

    /*
        getMenuInflater()方法能够得到MenuInflater对象
        再调用它的inflatre()方法就可以给当前活动创建菜单了
    */
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main,menu);
        return true;
    }

    /*
        item.getItemId()用于判断点击了哪个菜单项
        此处是为了响应菜单
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()){
            case R.id.add_item:
                Toast.makeText(this,"You clicked Add.",Toast.LENGTH_SHORT).show();
                break;
            case  R.id.remove_item:
                Toast.makeText(this,"You clicked Remote.",Toast.LENGTH_SHORT).show();
                break;
            case R.id.exit_item:
                Toast.makeText(this,"You clicked Exit.",Toast.LENGTH_SHORT).show();
                finish();
                break;
            default:
        }
        return  true;
    }

    /*
        这里是用于得到返回的数据所进行的操作
        onActivityResult()中
        第一个参数是我们启动活动时传入的请求码；
        第二个参数是我们在返回数据时传入的处理结果；
        三个参数即携带着返回数据的Intent
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode){
            case 1:
                if(resultCode == RESULT_OK){
                    String returnedData = data.getStringExtra("data_return");
                    Log.d("FirstActivity",returnedData);
                }
                break;
            default:
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        /*
            项目中添加的任何资源都会在R文件中生成一个相应的资源id
            调用R.layout.first_layout就可以得到first_layout.xml布局的id
            再传入setContenntView()即可
         */
        setContentView(R.layout.first_layout);
        Button button1 = (Button)findViewById(R.id.button_1);

        /*
        * findById()方法获取到在布局文件中定义的元素
        * 此处按钮的作用主要是显示Toast
        * Toast通过静态方法makeText()创建一个Toast对象，然后调用show()显示出来
        * */
        /*
            button1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(FirstActivity.this,"You clicked Button1",Toast.LENGTH_SHORT).show();
                }
            });
        */

        /*
            此处button主要是将活动摧毁了，效果和按下Back键是一样的
         */
        /*
            button1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    finish();
                }
            });
        */

        /*
        `   显式使用Intent
            此处button主要是学习使用Intent
            Intent是Android程序中各组件之间交互的一种重要方式
            它不仅可以指明当前组件想要执行的动作
            还可以在不同组件之间传递数据；

            Intent有多个构造函数的重载
            其中一个是Intent(Context packageContext,Class<?>cls)
            这里第一个参数要求提供一个启动活动的上下文，
            第二个参数则是指定想要启动的目标活动，通过这个构造函数可以构建出Intent的“意图”
            startActivity()方法则是专门用于启动活动的
         */
        /*
            button1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
                    startActivity(intent);
                }
            });
        */

        /*
            此处主要使用了隐式Intent
            每个Intent只能指定一个action，但却能指定多个category
         */
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                /*
                    这里指定了一个自定义的category，值为括号的值
                    若没有地方响应这个Intent，那么程序就会报错
                    在SecondActivity处则响应了这个Intent
                 */
                /*
                    Intent intent = new Intent("com.example.activitytest.ACTION_START");
                    intent.addCategory("com.example.activitytest.MY_CATEGORY");
                */

                /*
                    此处的ACTION_VIEW是Android系统的内置动作
                    通过Uri.parse()方法将一个网址字符串解析成一个Uri对象
                    在调用Intent的setData()将Uri对象传递进去
                    setData()主要用于指定当前Intent正在操作的数据
                 */
                /*
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setData(Uri.parse("http://www.baidu.com"));
                */
                /*
                    Intent intent = new Intent(Intent.ACTION_DIAL);
                    intent.setData(Uri.parse("tel:10086"));
                */

                /*
                    向下一个活动传递数据
                 */
                /*
                    String data = "Hello SecondActivity";
                    Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
                    intent.putExtra("extra_data",data);
                */

                /*
                    返回数据给上一个活动
                    startActivityForResult()中
                    第一个参数还是Intent，第二个参数是请求码，用于启动活动
                    这个方法期望在活动摧毁的时候能够返回一个结果给上一个活动
                 */
                Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
                startActivityForResult(intent,1);
               // startActivity(intent);
            }
        });

    }
}
